<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>Bit fields - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../../common/favicon.ico">
<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"c/language/bit_field","wgTitle":"c/language/bit field","wgCurRevisionId":130102,"wgArticleId":13963,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"c/language/bit_field","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-c {line-height: normal;}
.source-c li, .source-c pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for c
 * CSS class: source-c, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.c.source-c  {font-family:monospace;}
.c.source-c .imp {font-weight: bold; color: red;}
.c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
.c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.c.source-c .li2 {font-weight: bold; vertical-align:top;}
.c.source-c .kw1 {color: #0000dd;}
.c.source-c .kw2 {color: #0000ff;}
.c.source-c .kw3 {color: #0000dd;}
.c.source-c .kw4 {color: #0000ff;}
.c.source-c .co1 {color: #909090;}
.c.source-c .co2 {color: #339900;}
.c.source-c .coMULTI {color: #ff0000; font-style: italic;}
.c.source-c .es0 {color: #008000; font-weight: bold;}
.c.source-c .es1 {color: #008000; font-weight: bold;}
.c.source-c .es2 {color: #008000; font-weight: bold;}
.c.source-c .es3 {color: #008000; font-weight: bold;}
.c.source-c .es4 {color: #008000; font-weight: bold;}
.c.source-c .es5 {color: #008000; font-weight: bold;}
.c.source-c .br0 {color: #008000;}
.c.source-c .sy0 {color: #008000;}
.c.source-c .sy1 {color: #000080;}
.c.source-c .sy2 {color: #000040;}
.c.source-c .sy3 {color: #000040;}
.c.source-c .sy4 {color: #008080;}
.c.source-c .st0 {color: #008000;}
.c.source-c .nu0 {color: #000080;}
.c.source-c .nu6 {color:#000080;}
.c.source-c .nu8 {color:#000080;}
.c.source-c .nu12 {color:#000080;}
.c.source-c .nu16 {color:#000080;}
.c.source-c .nu17 {color:#000080;}
.c.source-c .nu18 {color:#000080;}
.c.source-c .nu19 {color:#000080;}
.c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
.c.source-c span.xtra { display:block; }

/*]]>*/
</style><!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_bit_field skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading">Bit fields</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../c.html" title="c">c</a>‎ | <a href="../language.html" title="c/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../../c.html" title="c"> C</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.html" title="c/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="c/header"> Headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../types.html" title="c/types"> Type support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../program.html" title="c/program"> Program utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../variadic.html" title="c/variadic"> Variadic function support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="c/error"> Error handling</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../memory.html" title="c/memory"> Dynamic memory management</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="c/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="c/algorithm"> Algorithms</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="c/numeric"> Numerics</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../chrono.html" title="c/chrono"> Date and time utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="c/io"> Input/output support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="c/locale"> Localization support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="c/thread"> Concurrency support</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental"> Technical Specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../index.html" title="c/symbol index"> Symbol index</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../language.html" title="c/language"> C language</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="basic_concepts.html" title="c/language/basic concepts">Basic concepts</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../keyword.html" title="c/keyword"> Keywords</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../preprocessor.html" title="c/preprocessor"> Preprocessor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="statements.html" title="c/language/statements"> Statements</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="expressions.html" title="c/language/expressions"> Expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="initialization.html" title="c/language/initialization"> Initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="declarations.html" title="c/language/declarations"> Declarations</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="functions.html" title="c/language/functions"> Functions</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Miscellaneous</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="history.html" title="c/language/history"> History of C</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental">Technical Specifications</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="declarations.html" title="c/language/declarations"> Declarations</a><div class="t-navbar-menu"><div><div style="display:inline-block">
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="pointer.html" title="c/language/pointer"> pointer</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="array.html" title="c/language/array"> array</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="enum.html" title="c/language/enum"><span class="t-lines"><span>enum</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="struct.html" title="c/language/struct"><span class="t-lines"><span>struct</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="union.html" title="c/language/union"><span class="t-lines"><span>union</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <strong class="selflink"> bit field</strong> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="atomic.html" title="c/language/atomic"> atomic types</a> <span class="t-mark-rev t-since-c11">(C11)</span></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="const.html" title="c/language/const"><span class="t-lines"><span>const</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="volatile.html" title="c/language/volatile"><span class="t-lines"><span>volatile</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="restrict.html" title="c/language/restrict"><span class="t-lines"><span>restrict</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c99">(C99)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="_Alignas.html" title="c/language/ Alignas"><span class="t-lines"><span>_Alignas</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="storage_duration.html" title="c/language/storage duration"> storage duration and linkage</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="extern.html" title="c/language/extern"> external and tentative definitions</a> </td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="typedef.html" title="c/language/typedef"><span class="t-lines"><span>typedef</span></span></a></div></div></td></tr>
<tr class="t-nv"><td colspan="5"><div class="t-nv-ln-table"><div><a href="static_assert.html" title="c/language/ Static assert"><span class="t-lines"><span>_Static_assert</span></span></a></div><div><span class="t-lines"><span><span class="t-mark-rev t-since-c11">(C11)</span></span></span></div></div></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="attributes.html" title="c/language/attributes"> attributes</a> <span class="t-mark-rev t-since-c23">(C23)</span></td></tr>
</table></div>
</div><div></div></div></div></div><div class="t-navbar-sep"> </div></div>
<p>Declares a member with explicit width, in bits. Adjacent bit field members may be packed to share and straddle the individual bytes.
</p><p>A bit field declaration is a <a href="struct.html" title="c/language/struct">struct</a> or <a href="union.html" title="c/language/union">union</a> member declaration which uses the following <a href="declarations.html" title="c/language/declarations">declarator</a>:
</p>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr>
<tr class="t-sdsc">
<td class="t-sdsc-nopad"> <span class="t-spar">identifier</span><span class="t-mark">(optional)</span> <code><b>:</b></code> <span class="t-spar">width</span>
</td>
<td class="t-sdsc-nopad">
</td>
<td class="t-sdsc-nopad">
</td></tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td></tr></table>
<table class="t-par-begin">


<tr class="t-par">
<td>  <span class="t-spar">identifier</span>
</td>
<td> -
</td>
<td>  the name of the bit field that is being declared. The name is optional: nameless bit fields introduce the specified number of bits of padding
</td></tr>
<tr class="t-par">
<td>  <span class="t-spar">width</span>
</td>
<td> -
</td>
<td>  an integer <a href="constant_expression.html" title="c/language/constant expression">constant expression</a> with a value greater or equal to zero and less or equal the number of bits in the underlying type. When greater than zero, this is the number of bits that this bit field will occupy. The value zero is only allowed for nameless bit fields and has special meaning: it specifies that the next bit field in the class definition will begin at an allocation unit's boundary.
</td></tr></table>
<h3><span class="mw-headline" id="Explanation">Explanation</span></h3>
<p>Bit fields can have only one of four types (possibly <a href="const.html" title="c/language/const">const</a> or <a href="volatile.html" title="c/language/volatile">volatile</a> qualified):
</p>
<ul><li> <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span>, for unsigned bit fields (<span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">unsigned</span> <span class="kw4">int</span> b<span class="sy4">:</span><span class="nu0">3</span><span class="sy4">;</span></span></span> has the range <span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">0</span>..<span class="nu0">7</span></span></span>)
</li><li> <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">signed</span> <span class="kw4">int</span></span></span>, for signed bit fields (<span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">signed</span> <span class="kw4">int</span> b<span class="sy4">:</span><span class="nu0">3</span><span class="sy4">;</span></span></span> has the range <span class="t-c"><span class="mw-geshi c source-c"><span class="sy2">-</span><span class="nu0">4</span>..<span class="nu0">3</span></span></span>)
</li><li> <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span>, for bit fields with implementation-defined signedness (Note that this differs from the meaning of the keyword <code>int</code> everywhere else, where it means "signed int"). For example, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span> b<span class="sy4">:</span><span class="nu0">3</span><span class="sy4">;</span></span></span> may have the range of values <span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">0</span>..<span class="nu0">7</span></span></span> or <span class="t-c"><span class="mw-geshi c source-c"><span class="sy2">-</span><span class="nu0">4</span>..<span class="nu0">3</span></span></span>.
</li></ul>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c99"><td>
<ul><li> <span class="t-c"><span class="mw-geshi c source-c">_Bool</span></span>, for single-bit bit fields (<span class="t-c"><span class="mw-geshi c source-c">bool x<span class="sy4">:</span><span class="nu0">1</span><span class="sy4">;</span></span></span> has the range <span class="t-c"><span class="mw-geshi c source-c"><span class="nu0">0</span>..<span class="nu0">1</span></span></span> and <a href="conversion.html" title="c/language/conversion">implicit conversions</a> to and from it follow the boolean conversion rules.
</li></ul>
</td>
<td><span class="t-mark-rev t-since-c99">(since C99)</span></td></tr>
</table>
<p>Additional implementation-defined types may be acceptable.<span class="t-rev-inl t-since-c11"><span> It is also implementation-defined whether a bit field may have <a href="atomic.html" title="c/language/atomic">atomic</a> type.</span> <span><span class="t-mark-rev t-since-c11">(since C11)</span></span></span>
The number of bits in a bit field (<span class="t-spar">width</span>) sets the limit to the range of values it can hold:
</p>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="co2">#include &lt;stdio.h&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span>
 <span class="co1">// three-bit unsigned field,</span>
 <span class="co1">// allowed values are 0...7</span>
 <span class="kw4">unsigned</span> <span class="kw4">int</span> b <span class="sy4">:</span> <span class="nu0">3</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">struct</span> S s <span class="sy1">=</span> <span class="br0">{</span><span class="nu0">7</span><span class="br0">}</span><span class="sy4">;</span>
    <span class="sy2">++</span>s.<span class="me1">b</span><span class="sy4">;</span> <span class="co1">// unsigned overflow</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%d<span class="es1">\n</span>"</span>, s.<span class="me1">b</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// output: 0</span>
<span class="br0">}</span></pre></div></div>
</div>
<p>Multiple adjacent bit fields are permitted to be (and usually are) packed together:
</p>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="co2">#include &lt;stdio.h&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span>
    <span class="co1">// will usually occupy 4 bytes:</span>
    <span class="co1">// 5 bits: value of b1</span>
    <span class="co1">// 11 bits: unused</span>
    <span class="co1">// 6 bits: value of b2</span>
    <span class="co1">// 2 bits: value of b3</span>
    <span class="co1">// 8 bits: unused</span>
    <span class="kw4">unsigned</span> b1 <span class="sy4">:</span> <span class="nu0">5</span>, <span class="sy4">:</span> <span class="nu0">11</span>, b2 <span class="sy4">:</span> <span class="nu0">6</span>, b3 <span class="sy4">:</span> <span class="nu0">2</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%zu<span class="es1">\n</span>"</span>,<span class="kw4">sizeof</span><span class="br0">(</span><span class="kw1">struct</span> S<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// usually prints 4</span>
<span class="br0">}</span></pre></div></div>
</div>
<p>The special <i>unnamed bit field</i> of <span class="t-spar">width</span> zero breaks up padding: it specifies that the next bit field begins at the beginning of the next allocation unit:
</p>
<div class="t-example"><div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="co2">#include &lt;stdio.h&gt;</span>
<span class="kw1">struct</span> S <span class="br0">{</span>
    <span class="co1">// will usually occupy 8 bytes:</span>
    <span class="co1">// 5 bits: value of b1</span>
    <span class="co1">// 27 bits: unused</span>
    <span class="co1">// 6 bits: value of b2</span>
    <span class="co1">// 15 bits: value of b3</span>
    <span class="co1">// 11 bits: unused</span>
    <span class="kw4">unsigned</span> b1 <span class="sy4">:</span> <span class="nu0">5</span><span class="sy4">;</span>
    <span class="kw4">unsigned</span> <span class="sy4">:</span><span class="nu0">0</span><span class="sy4">;</span> <span class="co1">// start a new unsigned int</span>
    <span class="kw4">unsigned</span> b2 <span class="sy4">:</span> <span class="nu0">6</span><span class="sy4">;</span>
    <span class="kw4">unsigned</span> b3 <span class="sy4">:</span> <span class="nu0">15</span><span class="sy4">;</span>
<span class="br0">}</span><span class="sy4">;</span>
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"%zu<span class="es1">\n</span>"</span>, <span class="kw4">sizeof</span><span class="br0">(</span><span class="kw1">struct</span> S<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// usually prints 8</span>
<span class="br0">}</span></pre></div></div>
</div>
<p>Because bit fields do not necessarily begin at the beginning of a byte, address of a bit field cannot be taken. Pointers to bit fields are not possible. Bit fields cannot be used with <a href="sizeof.html" title="c/language/sizeof"><code>sizeof</code></a> <span class="t-rev-inl t-since-c11"><span>and <a href="_Alignas.html" title="c/language/ Alignas"><code>_Alignas</code></a> </span> <span><span class="t-mark-rev t-since-c11">(since C11)</span></span></span>
</p>
<h3><span class="mw-headline" id="Notes">Notes</span></h3>
<p>The following properties of bit fields are <i>undefined</i>:
</p>
<ul><li> The effect of calling <span class="t-lc"><a href="../types/offsetof.html" title="c/types/offsetof">offsetof</a></span> on a bit field
</li></ul>
<p>The following properties of bit fields are <i>unspecified</i>:
</p>
<ul><li> Alignment of the allocation unit that holds a bit field
</li></ul>
<p>The following properties of bit fields are <i>implementation-defined</i>:
</p>
<ul><li> Whether bit fields of type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span> are treated as signed or unsigned
</li><li> Whether types other than <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span>, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">signed</span> <span class="kw4">int</span></span></span>, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">unsigned</span> <span class="kw4">int</span></span></span><span class="t-rev-inl t-since-c99"><span>, and <span class="t-c"><span class="mw-geshi c source-c">_Bool</span></span></span> <span><span class="t-mark-rev t-since-c99">(since C99)</span></span></span> are permitted
</li></ul>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c11"><td>
<ul><li> Whether atomic types are permitted
</li></ul>
</td>
<td><span class="t-mark-rev t-since-c11">(since C11)</span></td></tr>
</table>
<ul><li> Whether a bit field can straddle an allocation unit boundary
</li><li> The order of bit fields within an allocation unit (on some platforms, bit fields are packed left-to-right, on others right-to-left)
</li></ul>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c99"><td>
<p>Even though the number of bits in the object representation of <code>_Bool</code> is at least <span class="t-lc"><a href="../types/limits.html" title="c/types/limits">CHAR_BIT</a></span>, the <span class="t-spar">width</span> of the bit field of type <code>_Bool</code> cannot be greater than 1.
</p>
</td>
<td><span class="t-mark-rev t-since-c99">(since C99)</span></td></tr>
</table>
<p>In the C++ programming language, the width of a bit field can exceed the width of the underlying type, and bit fields of type <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">int</span></span></span> are always signed.
</p>
<h3><span class="mw-headline" id="References">References</span></h3>
<div class="t-ref-std-17">
<ul><li> C17 standard (ISO/IEC 9899:2018): 
</li></ul>
<dl><dd><ul><li> 6.7.2.1 Structure and union specifiers 
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-11">
<ul><li> C11 standard (ISO/IEC 9899:2011): 
</li></ul>
<dl><dd><ul><li> 6.7.2.1 Structure and union specifiers 
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-c99">
<ul><li> C99 standard (ISO/IEC 9899:1999): 
</li></ul>
<dl><dd><ul><li> 6.7.2.1 Structure and union specifiers 
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-c89">
<ul><li> C89/C90 standard (ISO/IEC 9899:1990): 
</li></ul>
<dl><dd><ul><li> 3.5.2.1 Structure and union specifiers 
</li></ul>
</dd></dl>
</div>
<h3><span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

</table>

<!-- 
NewPP limit report
Preprocessor visited node count: 2470/1000000
Preprocessor generated node count: 6318/1000000
Post‐expand include size: 51440/2097152 bytes
Template argument size: 10916/2097152 bytes
Highest expansion depth: 16/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:13963-0!*!0!!en!*!* and timestamp 20220313074056 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=c/language/bit_field&amp;oldid=130102">https://en.cppreference.com/mwiki/index.php?title=c/language/bit_field&amp;oldid=130102</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/c/language/bit_field">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 15 June 2021, at 08:39.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 86,820 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.686 secs. -->
	</body>
<!-- Cached 20220313074057 -->
</html>